package task

import (
	"database/sql"

	"gorm.io/gorm"

	"torler.com/qingyue/common/types"
)

// TaskRunInfo 任务运行信息
//
// 记录任务的运行记录
type TaskRunInfo struct {
	Id        types.TableId    `gorm:"primaryKey;autoIncrement"`               // 自增ID,主键,自动递增
	TaskId    string           `gorm:"column:tid;type:varchar(32);index"`      // 任务ID（关联TaskInfo）
	TaskName  types.TaskName   `gorm:"column:task_name;type:varchar(50)"`      //  任务名称
	Params    string           `gorm:"column:params;type:text"`                // 运行参数
	StartTime sql.NullTime     `gorm:"column:stime;type:datetime(0);index"`    // 开始时间
	EndTime   sql.NullTime     `gorm:"column:etime;type:datetime(0)"`          // 结束时间
	State     types.TaskStatus `gorm:"column:state;type:tinyint(1);default:0"` // 任务状态
	Result    string           `gorm:"column:result;type:text"`                //  任务执行结果(在数据库中存储为json)
	ErrorMsg  string           `gorm:"column:error_msg;type:text"`             // 错误信息
	Cost      int              `gorm:"column:cost;type:int;default:0"`         // 运行耗时（秒）

	types.Basic
}

func (taskInfo *TaskRunInfo) TableName() string {
	return "sp_task_run_info"
}

// 计算任务运行时间
func (taskRecord *TaskRunInfo) CalculateCost() int {
	if taskRecord.StartTime.Valid && taskRecord.EndTime.Valid {
		return int(taskRecord.EndTime.Time.Sub(taskRecord.StartTime.Time).Milliseconds())
	}
	return 0
}

// 保存任务运行记录
func (taskRecord *TaskRunInfo) Save(db *gorm.DB) error {
	taskRecord.Cost = taskRecord.CalculateCost()
	return db.Save(taskRecord).Error
}
